Generics-এ bounded type parameters ব্যবহার করা হয় একটি নির্দিষ্ট টাইপ বা টাইপ রেঞ্জ সীমাবদ্ধ করতে। এভাবে আমরা টাইপ প্যারামিটারগুলোর সাথে আরও নির্দিষ্ট নিয়ম প্রয়োগ করতে পারি।
Upper Bounded Type Parameter
Upper bounded টাইপ প্যারামিটার একটি টাইপকে নির্ধারিত ক্লাস বা ইন্টারফেস (এবং তার সাবক্লাস/ইমপ্লিমেন্টেশন) এর মধ্যে সীমাবদ্ধ করে। এটি extends কীওয়ার্ড ব্যবহার করে ঘোষণা করা হয়।
সিনট্যাক্স:
<T extends ClassName>
উদাহরণ:
import java.util.ArrayList;
import java.util.List;
public class Main {
// Upper Bounded Generics Method
public static double sumOfNumbers(List<? extends Number> list) {
double sum = 0.0;
for (Number num : list) {
sum += num.doubleValue();
}
return sum;
}
public static void main(String[] args) {
List<Integer> intList = new ArrayList<>();
intList.add(10);
intList.add(20);
intList.add(30);
List<Double> doubleList = new ArrayList<>();
doubleList.add(5.5);
doubleList.add(10.5);
System.out.println("Sum of Integers: " + sumOfNumbers(intList));
System.out.println("Sum of Doubles: " + sumOfNumbers(doubleList));
}
}
আউটপুট:
Sum of Integers: 60.0
Sum of Doubles: 16.0
কী শিখলাম:
? extends Numberনির্দেশ করে যে লিস্টের টাইপNumberবা তার সাবক্লাস হতে হবে (যেমনInteger,Double)।- এটি ডেটা রিড করতে কার্যকর।
Lower Bounded Type Parameter
Lower bounded টাইপ প্যারামিটার একটি টাইপকে নির্দিষ্ট ক্লাস বা তার সুপারক্লাসের মধ্যে সীমাবদ্ধ করে। এটি super কীওয়ার্ড ব্যবহার করে ঘোষণা করা হয়।
সিনট্যাক্স:
<T super ClassName>
উদাহরণ:
import java.util.ArrayList;
import java.util.List;
public class Main {
// Lower Bounded Generics Method
public static void addNumbers(List<? super Integer> list) {
list.add(10);
list.add(20);
}
public static void main(String[] args) {
List<Number> numberList = new ArrayList<>();
addNumbers(numberList);
System.out.println("Number List: " + numberList);
}
}
আউটপুট:
Number List: [10, 20]
কী শিখলাম:
? super Integerনির্দেশ করে যে লিস্টের টাইপIntegerবা তার সুপারক্লাস হতে হবে (যেমনNumber,Object)।- এটি ডেটা যোগ করার ক্ষেত্রে কার্যকর।
Upper vs Lower Bounded
| বৈশিষ্ট্য | Upper Bounded | Lower Bounded |
|---|---|---|
| কীওয়ার্ড | extends | super |
| কাজের ধরন | রিডিং ডেটার জন্য কার্যকর | লেখার/ডেটা যোগ করার জন্য কার্যকর |
| টাইপ রেঞ্জ | নির্দিষ্ট ক্লাস বা তার সাবক্লাস | নির্দিষ্ট ক্লাস বা তার সুপারক্লাস |
Wildcard in Generics
? হলো একটি wildcard যা টাইপ প্যারামিটারকে নমনীয় করে। এটি ? extends এবং ? super এর মাধ্যমে টাইপ রেঞ্জ নির্ধারণ করতে ব্যবহৃত হয়।
উদাহরণ:
// Wildcard with Upper Bound
List<? extends Number> upperBoundList;
// Wildcard with Lower Bound
List<? super Integer> lowerBoundList;
- Upper Bounded: নির্দিষ্ট টাইপের উপরে টাইপ সীমাবদ্ধ করতে কার্যকর।
- Lower Bounded: নির্দিষ্ট টাইপের নিচে টাইপ সীমাবদ্ধ করতে কার্যকর।
- Wildcard: নমনীয় টাইপ ম্যানিপুলেশনের জন্য।
Generics এ Upper এবং Lower Bounded Type Parameters টাইপ নিরাপত্তা ও ফ্লেক্সিবিলিটি বাড়ায়। এটি বড় ও জটিল জাভা প্রোজেক্টে বিশেষভাবে গুরুত্বপূর্ণ।
Read more